#include <stdio.h>

/* 这是程序的第1行。#include <stdio.h>的作用相当于把stdio.h文件中的所
有内容都输入该行所在的位置。实际上，这是一种“拷贝-粘贴”的操作。 */

/* #include这行代码是一条C预处理器指令（preprocessor directive）。通
常，C编译器在编译前会对源代码做一些准备工作，即预处理（preprocessing）。 */

/* #include中的#符号表明，C预处理器在编译器接手之前处理这条指令 */

/* 所有的C编译器软件包都提供stdio.h文件。该文件中包含了供编译器使
用的输入和输出函数（如， printf()）信息。该文件名的含义是标准输入/输
出头文件。通常，在C程序顶部的信息集合被称为头文件（header）。 */

/* 在大多数情况下，头文件包含了编译器创建最终可执行程序要用到的信
息。例如，头文件中可以定义一些常量，或者指明函数名以及如何使用它
们。但是，函数的实际代码在一个预编译代码的库文件中。简而言之，头文
件帮助编译器把你的程序正确地组合在一起 */

int main(void){

    /* C程序一定从main()函数开始执行（目前不必考虑例外的情况）。
     * 除了main()函数，你可以任意命名其他函数，而且
    *main()函数必须是开始的函数。*/

    /* int是main()函数的返回类型。这表明main()函数返回的值是整数。返回
    *到哪里？返回给操作系统 */

    /* 函数名后面的圆括号中包含一些传入函数的信息。该例中没有传
    递任何信息。因此，圆括号内是单词void */

    /** 在程序中，被/* 两个符号括起来的部分是程序的注释。。C 语言注释的好处之一是，可将
    注释放在任意的地方，甚至是与要解释的内容在同一行。较长的注释可单独
    放一行或多行。在注释符之间的内容都会被编译器忽略。**/

    /* 花括号把main()函数括起来。一般而言，所有的C函数
    都使用花括号标记函数体的开始和结束。这是规定，不能省略。 */

    int num;     /*定义一个名为num的变量；*/

    /*  这行代码叫作声明（declaration）。声明是C语言最重
    *要的特性之一。在该例中，声明完成了两件事。其一，在函数中有一个名为
    *num的变量（variable）。其二，int表明num是一个整数（即，没有小数点或
    *小数部分的数） */

    /* int是C语言的一个关键字（keyword），表示一种基本的C语言数据类
    型。关键字是语言定义的单词，不能做其他用途。 */

    /* 示例中的num是一个标识符（identifier），也就一个变量、函数或其他
    *实体的名称。因此，声明把特定标识符与计算机内存中的特定位置联系起
    *来，同时也确定了储存在某位置的信息类型或数据类型。 */

    /* 在C语言中，所有变量都必须先声明才能使用。这意味着必须列出程序
    中用到的所有变量名及其类型。 */

    /* 如果变量名无法清楚地表达自身的用途，可在注释中进一步说明。
     * 这是一种良好的编程习惯和编程技巧。 */

    /* 操作系统和C库经常使用以一个或两个下划线字符开始的标识符（如，
    *_kcab），因此最好避免在自己的程序中使用这种名称。标准标签都以一个
    *或两个下划线字符开始，如库标识符。 */

    /*  把声明放在一起更容易理解程序的用途。 */

    num = 1;    /* 为num赋值 */

    /* 在执行int num;声明时，编译器在计算机内存中为变量num预留了空间，
     然后在执行这行赋值表达式语句时，把值储存在之前预留的位置。
     可以给num赋不同的值，这就是num之所以被称为变量（variable）的原因 */

    printf("I am a simple");   /* 使用printf()函数*/

    printf("computer.\n");

    printf("My favorite number is %d. Because it is first.\n", num);

    return 0;

    /* 强烈建议读者养成在 main()函数中
    保留 return 语句的好习惯。在这种情况下，可将其看作是统一代码风格。但
    对于某些操作系统（包括Linux和UNIX），return语句有实际的用途 */

}

